﻿using System;
using System.Collections.Generic;
using System.Text;

namespace VkSample51
{
    public class BallData
    {
        public uint VCount { get; set; }

        public float[] Data { get; set; }

        public void GenBallData(float angleSpan)
        {
            float r = 1.0f;
            List<float> alVertix = new List<float>();
            for(float vAngle = -90; vAngle < 90; vAngle += angleSpan)
            {
                for(float hAngle = 0; hAngle <= 360; hAngle += angleSpan)
                {
                    float x0 = r * MathF.Cos(vAngle / 180.0f * MathF.PI) * MathF.Cos(hAngle / 180.0f * MathF.PI);
                    float y0 = r * MathF.Cos(vAngle / 180.0f * MathF.PI) * MathF.Sin(hAngle / 180.0f * MathF.PI);
                    float z0 = r * MathF.Sin(vAngle / 180.0f * MathF.PI);
                    float x1 = r * MathF.Cos(vAngle / 180.0f * MathF.PI) * MathF.Cos((hAngle + angleSpan) / 180.0f * MathF.PI);
                    float y1 = r * MathF.Cos(vAngle / 180.0f * MathF.PI) * MathF.Sin((hAngle + angleSpan) / 180.0f * MathF.PI);
                    float z1 = r * MathF.Sin(vAngle / 180.0f * MathF.PI);
                    float x2 = r * MathF.Cos((vAngle + angleSpan) / 180.0f * MathF.PI) * MathF.Cos((hAngle + angleSpan) / 180.0f * MathF.PI);
                    float y2 = r * MathF.Cos((vAngle + angleSpan) / 180.0f * MathF.PI) * MathF.Sin((hAngle + angleSpan) / 180.0f * MathF.PI);
                    float z2 = r * MathF.Sin((vAngle + angleSpan) / 180.0f * MathF.PI);
                    float x3 = r * MathF.Cos((vAngle + angleSpan) / 180.0f * MathF.PI) * MathF.Cos(hAngle / 180.0f * MathF.PI);
                    float y3 = r * MathF.Cos((vAngle + angleSpan) / 180.0f * MathF.PI) * MathF.Sin(hAngle / 180.0f * MathF.PI);
                    float z3 = r * MathF.Sin((vAngle + angleSpan) / 180.0f * MathF.PI);
                    alVertix.Add(x1); alVertix.Add(y1); alVertix.Add(z1);
                    alVertix.Add(x3); alVertix.Add(y3); alVertix.Add(z3);
                    alVertix.Add(x0); alVertix.Add(y0); alVertix.Add(z0);
                    alVertix.Add(x1); alVertix.Add(y1); alVertix.Add(z1);
                    alVertix.Add(x2); alVertix.Add(y2); alVertix.Add(z2);
                    alVertix.Add(x3); alVertix.Add(y3); alVertix.Add(z3);
                }
            }
            VCount = (uint)alVertix.Count / 3;
            Data = alVertix.ToArray();
        }
    }
}
